Streaming media is media that is consumed while it is being delivered. Streaming technology allows a user to download media files (e.g., audio-video files) for immediate playback, thereby avoiding time-consuming downloads of large files. Audio-video streaming over the Internet has become quite popular.
A streaming server is a software program that is capable of providing a media file to a client program as a stream of media data. A media file may be an audio file, a video file, or an audio-video file (i.e., a file containing both audio and video). Media data is the data within a media file.
A streaming client is a software program that allows a user to play a media file that is being streamed from a streaming server. To play (or play back) a media file refers to converting media data into a user-perceptible form. For example, to play an audio-video file refers to converting video data into moving images and converting the corresponding audio data into audible sounds that may be heard by the user.
A streaming client may utilize a streaming buffer, which is an amount of memory that is used by the streaming client to temporarily store media data. In typical operation, a streaming client does not begin playing a streaming media file until the streaming buffer has been filled to a threshold level. As the streaming client plays the streaming media file, it uses up media data in the buffer. However, at the same time, more media data is being downloaded to the buffer. As long as the data can be downloaded as fast as it is used up in playback, the media file will play smoothly.
Unfortunately, however, the available bandwidth on the network for streaming media can vary based on the channel conditions. As an example in a wireless network, interference from cordless phones, microwaves, and the like can cause the available bandwidth to degrade. Cross-traffic on the network provides another source contributing to variable available bandwidth for streaming media.
Variations in the amount of available network bandwidth can cause problems for streaming media. For example, if the network becomes congested, the rate at which a media file is being streamed may be less (even significantly less) than the rate at which the streaming client is consuming media data from the streaming buffer. If this continues for some period of time, the streaming buffer may become depleted so that there is no media data remaining in the streaming buffer. This condition is sometimes referred to as buffer underflow (or, alternatively, buffer underrun). When buffer underflow occurs, the streaming client temporarily stops playing the media file until it is able to receive and re-buffer enough media data to restart playback. Of course, such interruptions in playback of the media file can be frustrating to the user of the streaming client.